/*
 * mockpedidos.cpp
 *
 */
#include "../application/AdminKeys.h"
#include "../middleware/CommunicationPrimerCinta.h"
#include "../middleware/CommunicationRobot11.h"
#include "../common/Random.h"

int main(int argv, char **agrv)
{
	AdminKeys adminZonaIzq(ZONA_IZQ);
	AdminKeys adminZonaDer(ZONA_DER);
	middleware::CommunicationPrimerCinta comCintaA(adminZonaIzq.getCintaKey());
	middleware::CommunicationPrimerCinta comCintaB(adminZonaDer.getCintaKey());
	middleware::CommunicationRobot11 comRobot11A(adminZonaIzq.getRobot11Key());
	middleware::CommunicationRobot11 comRobot11B(adminZonaDer.getRobot11Key());

	CLogger::create("Mock pedidos", true);
	CLogger::log("Iniciando en prod id 101...");

	int mockProdId = 101;

	while (true) {
		CLogger::log("PAra un nuevo producto pulse una tecla y enter");
		char a;
		std::cin >> a;

		int tipo, prodId;
		if (Random::coin()) {
			tipo = 1;
			prodId = mockProdId++;
		} else {
			tipo = 2;
			prodId = (mockProdId++) * 5;
		}

		CLogger::log("Tipo de producto " + StringUtils::itos(tipo));

		Producto prod;
		prod.tipo = tipo;
		prod.productoId = prodId;
		prod.estado = PRODUCTO_EN_PRODUCCION;

		/* Mock para poner productos en la cinta */
		if(a == 'a'){
			CLogger::log("Cinta A");
			comCintaA.lockCinta();
			if (comCintaA.primerEspacioVacio()) {
				comCintaA.ponerProducto(prod);
				CLogger::log("Puse propducto");
				if (comCintaA.ultimoEspacioVacio()){
					CLogger::log("Movi cinta");
					comCintaA.moverCinta();
				}
				comCintaA.unlockCinta();
				comRobot11A.despertarHayProductoCinta();
			} else {
				comCintaA.unlockCinta();
			}
		} else {
			CLogger::log("Cinta B");
			comCintaB.lockCinta();
			if (comCintaB.primerEspacioVacio()) {
				comCintaB.ponerProducto(prod);
				CLogger::log("Puse propducto");
				if (comCintaB.ultimoEspacioVacio()){
				CLogger::log("Movi cinta");
					comCintaB.moverCinta();
				}
				comCintaB.unlockCinta();
				comRobot11B.despertarHayProductoCinta();
			} else {
				comCintaB.unlockCinta();
			}
		}
	}
	return 0;
}



